// const isObject = val => val !== null && typeof val === 'object'
// const covert = target => isObject(target) ? reactive(target) : target
// const hasOwnProperty = Object.prototype.hasOwnProperty

// const hasOwn = (target, key) => hasOwnProperty.call(target, key)

// export function reactive(target) {
//     if (!isObject(target)) return target
//     const handler = {
//         get(target, key, receiver) {
//             track(target, key)
//             return covert(Reflect.get(target, key, receiver))
//         },
//         set(target, key, val, receiver) {
//             let oldVal = Reflect.get(target, key, receiver)
//             let res = Reflect.set(target, key, val, receiver)

//             if (oldVal !== val && res) {
//                 trigger(target, key)
//                 return res
//             }
//             return true
//         },
//         deleteProperty(target, key) {
//             const hasKey = hasOwn(target, key)
//             const res = Reflect.deleteProperty(target, key)
//             if (hasKey && res) {
//                 trigger(target, key)
//             }
//             return res
//         }
//     }
//     return new Proxy(target, handler)
// }

// let activeEffect = null
// export function effect(callback) {
//     activeEffect = callback
//     // 收集依赖
//     callback()
//     activeEffect = null
// }
// let targetMap = new WeakMap()

// export function track(target, key) {
//     if (!activeEffect) {
//         return
//     }
//     let depsMap = targetMap.get(target)
//     if (!depsMap) {
//         targetMap.set(target, (depsMap = new Map()))
//     }
//     let dep = depsMap.get(key)
//     if (!dep) {
//         depsMap.set(key, (dep = new Set()))
//     }
//     dep.add(activeEffect)
// }

// export function trigger(target, key) {
//     const depsMap = targetMap.get(target)
//     if (!depsMap) {
//         return
//     }
//     const dep = depsMap.get(key)
//     if (dep) {
//         dep.forEach(effect => {
//             effect()
//         })
//     }
// }
// export function ref(raw) {
//     // 判断raw是否是ref创建的对象
//     if (isObject(raw) && raw.__v_isRef) {
//         return
//     }

//     let value = covert(raw)
//     const r = {
//         __v_isRef: true,
//         get value() {
//             track(r, 'value')
//             return value
//         },
//         set value(val) {
//             if (val !== raw) {
//                 raw = val
//                 value = covert(raw)
//                 trigger(r, 'value')
//             }
//         }
//     }
//     return r
// }

// export function toRefs(proxy) {

//     const ret = proxy instanceof Array ? new Array(proxy.length) : {}

//     for (const key in proxy){
//         ret[key] = toProxyRef(proxy, key)
//     }
//     return ret
// }
// function toProxyRef(proxy, key) {
//     const r = {
//         __v_isRef: true,
//         get value(){
//             return proxy[key]
//         },
//         set value(val){
//             proxy[key] = val
//         }
//     }
//     return r
// }

// export function computed(getter){
//     const res = ref()
//     effect(() => {
//         res.value = getter()
//     })
//     return  res
// }

// 
export function reactive() {
    
}